package com.xcity.game.player.robot;

import java.util.List;

import com.xcity.db.entity.Player;

import gnu.trove.map.TIntObjectMap;
import gnu.trove.map.hash.TIntObjectHashMap;
import naga.x.App;
import naga.x.game.template.TemplateService;
import naga.x.util.CommonUtils;

public class RobotUtils {

	protected static TIntObjectMap<Robot> robots;
	protected static Robot[] robotArrays;
	
	static {
		List<RobotTemplate> templates = App.getApp().getServiceManager().get(TemplateService.class).getTemplatesList(RobotTemplate.class);
		robots = new TIntObjectHashMap<Robot>(templates.size());
		for (int i = 0; i < templates.size(); i++) {
			RobotTemplate robot = templates.get(i);
			robots.put(robot.getId(), new Robot(robot));
		}
		robotArrays = robots.values(new Robot[robots.size()]);
	}
	
	public static Player find(long id) {
		return id > Integer.MAX_VALUE ? null : find((int) id);
	}
	
	public static Player find(int id) {
		return robots.get(id);
	}
	
	public static Player getDefault() {
		return robots.get(8); // id = 8
	}
	
	public static Player getRandomly() {
		int i = CommonUtils.randomInt(robotArrays.length);
		Robot robot = robotArrays[i];
		return robot;
	}
	
	public static boolean isRobot(Player player) {
		return isRobot(player.getId());
	}
	
	public static boolean isRobot(long id) {
		return find(id) != null;
	}
	
//	@Deprecated
//	public static ActionTarget getDefaultStealTarget(Player source) {
//		return newStealTarget(source, (Robot) getDefault());
//	}
//	
//	@Deprecated
//	public static ActionTarget findStealTarget(Player source) {
//		int i = CommonUtils.randomInt(robotArrays.length);
//		Robot robot = robotArrays[i];
//		return newStealTarget(source, robot);
//	}
//	
//	@Deprecated
//	private static ActionTarget newStealTarget(Player source, Robot robot) {
//		int[] region = AdventureService.getStealGoldRegion(source);
//		int min = robot.getTemplate().getMinBeStolenGold();
//		if (min <= 0) {
//			min = region[0];
//		}
//		int max = robot.getTemplate().getMaxBeStolenGold();
//		if (max <= 0) {
//			max = region[1];
//		}
//		int canStealGold = CommonUtils.randomInt(min, max);
//		return new ActionTarget(robot.getId(), canStealGold);
//	}
//	
//	@Deprecated
//	public static void fillStealTargets(List<ActionTarget> list) {
//		int maxGold = list.get(0).getGold() - 5000;
//		if (maxGold < 1) {
//			return;
//		}
//		int minGold = 10000;
//		if (minGold > maxGold) {
//			return;
//		}
//		int i = CommonUtils.randomInt(robotArrays.length);
//		int retrys = 3;
//		while (--retrys >= 0) {
//			Player robot = robotArrays[i];
//			int gold = CommonUtils.randomInt(minGold, maxGold);
//			ActionTarget target = new ActionTarget(robot.getId(), gold);
//			if (!list.contains(target)) {
//				list.add(target);
//				if (list.size() >= 3) {
//					CommonUtils.shuffle(list);
//					break;
//				}
//			}
//			if (++i >= robotArrays.length) {
//				i = 0;
//			}
//		}
//	}
	
	
}
